import { query, useParams, createAsync } from "@solidjs/router" import { createMemo, createSignal, Show } from "solid-js" import { IconCopy, IconCheck } from "~/component/icon" import { Key } from "@opencode-ai/console-core/key.js" import { Billing } from "@opencode-ai/console-core/billing.js" import { withActor } from "~/context/auth.withActor" import styles from "./new-user-section.module.css" import { useI18n } from "~/context/i18n" const getUsageInfo = query(async (workspaceID: string) => { "use server" return withActor(async () => { return await Billing.usages() }, workspaceID) }, "usage.list") const listKeys = query(async (workspaceID: string) => { "use server" return withActor(() => Key.list(), workspaceID) }, "key.list") export function NewUserSection() { const params = useParams() const i18n = useI18n() const [copiedKey, setCopiedKey] = createSignal(false) const keys = createAsync(() => listKeys(params.id!)) const usage = createAsync(() => getUsageInfo(params.id!)) const isNew = createMemo(() => { const keysList = keys() const usageList = usage() return keysList?.length === 1 && (!usageList || usageList.length === 0) }) const defaultKey = createMemo(() => { const key = keys()?.at(-1)?.key if (!key) return undefined return { actual: key, masked: key.slice(0, 8) + "*".repeat(key.length - 12) + key.slice(-4), } }) return (

{i18n.t("workspace.newUser.feature.tested.title")}

{i18n.t("workspace.newUser.feature.tested.body")}

{i18n.t("workspace.newUser.feature.quality.title")}

{i18n.t("workspace.newUser.feature.quality.body")}

{i18n.t("workspace.newUser.feature.lockin.title")}

{i18n.t("workspace.newUser.feature.lockin.body")}

{defaultKey()?.masked}
  1. {i18n.t("workspace.newUser.step.enableBilling")}
  2. {i18n.t("workspace.newUser.step.login.before")} opencode auth login{" "} {i18n.t("workspace.newUser.step.login.after")}
  3. {i18n.t("workspace.newUser.step.pasteKey")}
  4. {i18n.t("workspace.newUser.step.models.before")} /models{" "} {i18n.t("workspace.newUser.step.models.after")}
) }